{"version":3,"file":"vite-plugin.cjs.js","sources":["../src/vite-plugin.ts"],"sourcesContent":["// ─── actjs Vite plugin ────────────────────────────────────────────────────────\n// Reads actjs.deps.json at build time and:\n//   • Adds declared packages to Rollup's external list\n//   • Injects a <script type=\"importmap\"> into index.html\n//   • Injects <link rel=\"stylesheet\"> tags for known CSS packages\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Plugin, HtmlTagDescriptor } from 'vite';\nimport type { ActDepsConfig } from './deps.js';\nimport { resolveUrl, resolveStylesheetUrl } from './deps.js';\n\n/**\n * Vite plugin that reads `actjs.deps.json` and wires up CDN package loading\n * at build time — import map injection, stylesheet links, and Rollup externals.\n *\n * @example\n * // vite.config.ts\n * import { actjsPlugin } from 'actjs/vite'\n * export default defineConfig({ plugins: [actjsPlugin()] })\n */\nexport function actjsPlugin(): Plugin {\n  let deps: ActDepsConfig | null = null;\n\n  return {\n    name: 'actjs',\n\n    configResolved(config) {\n      const depsPath = join(config.root, 'actjs.deps.json');\n      if (!existsSync(depsPath)) return;\n      try {\n        deps = JSON.parse(readFileSync(depsPath, 'utf-8')) as ActDepsConfig;\n      } catch {\n        config.logger.warn('[actjs] Could not parse actjs.deps.json — skipping CDN integration');\n      }\n    },\n\n    config() {\n      // Always wire up the JSX transform so `vite dev` works out of the box\n      // without requiring jsxImportSource in tsconfig or vite.config manually.\n      const base = {\n        esbuild: {\n          jsx: 'automatic' as const,\n          jsxImportSource: 'js-act',\n        },\n      };\n      if (!deps) return base;\n      // Externalize all declared packages so Rollup doesn't try to bundle them\n      return {\n        ...base,\n        build: {\n          rollupOptions: {\n            external: Object.keys(deps.packages),\n          },\n        },\n      };\n    },\n\n    transformIndexHtml(): HtmlTagDescriptor[] {\n      if (!deps) return [];\n      const { provider = 'esm.sh', packages } = deps;\n      const tags: HtmlTagDescriptor[] = [];\n      const importMap: Record<string, string> = {};\n\n      for (const [pkg, version] of Object.entries(packages)) {\n        importMap[pkg] = resolveUrl(pkg, version, provider);\n\n        const cssUrl = resolveStylesheetUrl(pkg, version);\n        if (cssUrl) {\n          tags.push({\n            tag: 'link',\n            attrs: { rel: 'stylesheet', href: cssUrl },\n            injectTo: 'head',\n          });\n        }\n      }\n\n      // Import map must be injected before any module scripts\n      tags.unshift({\n        tag: 'script',\n        attrs: { type: 'importmap' },\n        children: JSON.stringify({ imports: importMap }, null, 2),\n        injectTo: 'head-prepend',\n      });\n\n      return tags;\n    },\n  };\n}\n"],"names":["actjsPlugin","deps","config","depsPath","join","existsSync","readFileSync","e","base","provider","packages","tags","importMap","pkg","version","resolveUrl","cssUrl","resolveStylesheetUrl"],"mappings":"mKAqBO,SAASA,GAAsB,CACpC,IAAIC,EAA6B,KAEjC,MAAO,CACL,KAAM,QAEN,eAAeC,EAAQ,CACrB,MAAMC,EAAWC,EAAAA,KAAKF,EAAO,KAAM,iBAAiB,EACpD,GAAKG,EAAAA,WAAWF,CAAQ,EACxB,GAAI,CACFF,EAAO,KAAK,MAAMK,EAAAA,aAAaH,EAAU,OAAO,CAAC,CACnD,OAAQI,EAAA,CACNL,EAAO,OAAO,KAAK,oEAAoE,CACzF,CACF,EAEA,QAAS,CAGP,MAAMM,EAAO,CACX,QAAS,CACP,IAAK,YACL,gBAAiB,QAAA,CACnB,EAEF,OAAKP,EAEE,CACL,GAAGO,EACH,MAAO,CACL,cAAe,CACb,SAAU,OAAO,KAAKP,EAAK,QAAQ,CAAA,CACrC,CACF,EARgBO,CAUpB,EAEA,oBAA0C,CACxC,GAAI,CAACP,EAAM,MAAO,CAAA,EAClB,KAAM,CAAE,SAAAQ,EAAW,SAAU,SAAAC,CAAA,EAAaT,EACpCU,EAA4B,CAAA,EAC5BC,EAAoC,CAAA,EAE1C,SAAW,CAACC,EAAKC,CAAO,IAAK,OAAO,QAAQJ,CAAQ,EAAG,CACrDE,EAAUC,CAAG,EAAIE,EAAAA,WAAWF,EAAKC,EAASL,CAAQ,EAElD,MAAMO,EAASC,EAAAA,qBAAqBJ,EAAKC,CAAO,EAC5CE,GACFL,EAAK,KAAK,CACR,IAAK,OACL,MAAO,CAAE,IAAK,aAAc,KAAMK,CAAA,EAClC,SAAU,MAAA,CACX,CAEL,CAGA,OAAAL,EAAK,QAAQ,CACX,IAAK,SACL,MAAO,CAAE,KAAM,WAAA,EACf,SAAU,KAAK,UAAU,CAAE,QAASC,CAAA,EAAa,KAAM,CAAC,EACxD,SAAU,cAAA,CACX,EAEMD,CACT,CAAA,CAEJ"}